<?php
namespace App\Services\Sms;

use App\Services\HttpAbstract;

class Smser extends HttpAbstract implements SmsContract
{

	/**
	 * HTTP请求超时时间
	 */
	protected $timeout = 5;

	/**
	 * 发送短信
	 */
	public function send($mobile, $content)
	{
		// 忽略单元测试环境。
		if (app()->runningUnitTests()) {
			return false;
		}

        $productid = '16841';
        $end_content = $content . '【渔鱼医疗】';

		// 封装数据。
		$data = [
			// 产品ID。
			'enterpriseID' => $productid,

			// 在本短信平台注册的用户名。
			'loginName' => 'admin',

			// 平台登录密码MD5后的值。
			'password' => md5('yyab121'),

			// 目标手机号码，多个手机号码使用半角逗号分隔，最多200个。
			'mobiles' => $mobile,

			// 短信内容，在尾部增加签名字段。
			'content' => $end_content
		];

		// 短信接口URL。
		$url = 'http://119.145.9.12/sendSMS.action';

		// GET方式调用接口。
		$retult = $this->httpPost($url, $data);

		// 取得返回码与信息。
		@list ($code, $message) = explode(',', $retult);
		$code = (int) $code;
		$message = (string) $message;

		// 检查返回。
		return [
            'code' => $code,
            'message' => $message
        ];
	}

	/**
	 * GET方法请求HTTP
	 *
	 * @param string $url
	 * @param array $data
	 */
	protected function httpGet($url, $data = [])
	{
		return $this->httpRequest('GET', $url, $data);
	}

	/**
	 * POST方法请求HTTP
	 *
	 * @param string $url
	 * @param array $data
	 */
	protected function httpPost($url, $data = [])
	{
		return $this->httpRequest('POST', $url, $data);
	}

	/**
	 * 基础HTTP请求实现
	 * @param string $method
	 * @param string $url
	 * @param array $data
	 * @return string
	 */
	private function httpRequest($method, $url, $data)
	{
		$method = strtoupper($method);
		if (! in_array($method, [
			'GET',
			'POST'
		])) {
			$method = 'GET';
		}

		$response = false;
		try {

			$data = http_build_query($data);

			$opts = [
				'http' => [
					'method' => $method,
					'timeout' => $this->timeout
				]
			];

			switch ($method) {
				case 'GET':
					$url .= strpos($url, '?') === false ? '?' : '&';
					$url .= $data;
					break;
				case 'POST':
					$opts['http']['header'] = "Content-type: application/x-www-form-urlencoded\r\nContent-Length: " . strlen($data) . "\r\n";
					$opts['http']['content'] = $data;
					break;
			}

			$context = stream_context_create($opts);
			$response = file_get_contents($url, false, $context);
		} catch (\Exception $e) {
			// 捕获异常。
			// throw $e;
			// TODO: 记录错误日志，静默处理。
		}

		// 剔除前后空格。
		$response = preg_replace('/^\\s+|\\s+$/', '', $response);

		return $response;
	}
}
